﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using InnvoiceActual.Logica.GestorDB;
using InnvoiceActual.Logica.GestorObject;
using System.ComponentModel;

namespace InnvoiceActual.Ws.Clientes
{
    /// <summary>
    /// Lógica de interacción para ClienteWS.xaml
    /// </summary>
    public partial class ClienteWS : Window
    {
        private ClienteCS miCliente = new ClienteCS();
        private byte mOperacion = new byte();
        ClienteDB coneClassCliente = new ClienteDB();

        public ClienteWS(ClienteCS auxCliente, byte auxOperacion)
        {
            InitializeComponent();
            miCliente = auxCliente;
            mOperacion = auxOperacion;
            DataContext = miCliente;
            miCliente.PropertyChanged += new PropertyChangedEventHandler(cliente_PropertyChanged);
            //setearComboBox();

            // seteo pais
            PaisDB misPaises = new PaisDB();
            cbxPais.ItemsSource = misPaises.obtenerPaises();

            //seteo de provincias
            ProvinciaDB misprovincias = new ProvinciaDB();
            cbxProvincia.ItemsSource = misprovincias.obtenerProvincia_2((int)cbxPais.SelectedValue);

            //seteo de localidades
            LocalidadDB misLocalidades = new LocalidadDB();
            cbxLocalidad.ItemsSource = misLocalidades.obtenerLocalidad_2((int)cbxProvincia.SelectedValue);

            //seteo de tipo de documentos
            DniDB misTipoDni = new DniDB();
            cbxTipoDoc.ItemsSource = misTipoDni.obtenerDescripDni();

            //seteo de tipo de contrbucion
            TipoContribuyenteDB misTipoContrib = new TipoContribuyenteDB();
            cbxTipoContrib.ItemsSource = misTipoContrib.obtenerTipoContribucion();

            //seteo las condiciones de pago
            CondicionDePagoDB misCondiciones = new CondicionDePagoDB();
            cbxCondiPago.ItemsSource = misCondiciones.obtenerCondicionDePago();

            //Verifica si esta todo ok de entrada
            btnAceptar.IsEnabled = miCliente.IsValid();

        }

        private void cliente_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            btnAceptar.IsEnabled = miCliente.IsValid();
        }


        private void Window_Loaded(object sender, RoutedEventArgs e)
        {         

        }

        private void btnCancelar_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        //setea los combobox
        private void setearComboBox()
        {
            cbxPais.SelectedValue = miCliente.NroPais;
            cbxProvincia.SelectedValue = miCliente.NroProvincia;
            cbxLocalidad.SelectedValue = miCliente.NroLocalidad;
            cbxTipoDoc.SelectedValue = miCliente.TipoDni;
            cbxTipoContrib.SelectedValue = miCliente.NroTipoContrib;
            cbxCondiPago.SelectedValue = miCliente.NroCondicionDePago;
        }

        private void AgregarNuevo_Cliente(byte miOperacion)
        {
            miCliente.NroPais = Convert.ToInt16(cbxPais.SelectedValue.ToString());
            miCliente.NroProvincia = Convert.ToInt16(cbxProvincia.SelectedValue.ToString());
            miCliente.NroLocalidad = Convert.ToInt16(cbxLocalidad.SelectedValue.ToString());
            miCliente.TipoDni = Convert.ToInt16(cbxTipoDoc.SelectedValue.ToString());
            miCliente.NroTipoContrib = Convert.ToInt16(cbxTipoContrib.SelectedValue.ToString());
            miCliente.NroCondicionDePago = Convert.ToInt16(cbxCondiPago.SelectedValue.ToString());
            //ClienteDB coneClassCliente = new ClienteDB();

            switch (miOperacion)
            {
                case 0:
                    //Agrega un Nuevo Cliente.
                    coneClassCliente.DarDeAltaCliente(miCliente);
                    break;
                case 1:
                    //Modifica los Datos Existentes.             
                    coneClassCliente.Actualizarcliente(miCliente);
                    break;
            }
            this.Close();
        }

        private void btnAceptar_Click(object sender, RoutedEventArgs e)
        {
            // Dar de alta un cliente.-
            AgregarNuevo_Cliente(mOperacion);
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.Key.ToString().ToUpper())
            {
                case "F2":
                    AgregarNuevo_Cliente(mOperacion);
                    break;
                case "F3":
                    
                    break;
                case "F4":

                    break;
                case "ESCAPE":
                    this.Close();
                    break;
                default:
                    return;
            }
        }
    }
}
